<?php
function sum1($a, $b, $callback)
{
    call_user_func($callback, $a, $b);
    call_user_func_array($callback, [$b, $a]);
    return $a + $b;
}

sum1(1, 2, function ($a, $b) {
    echo 'a的值：' . $a . PHP_EOL;
    echo 'b的值：' . $b . PHP_EOL;
}); //1 2 2 1

function sum2($a, $b, $callback)
{
    call_user_func($callback, $a, $b);
    call_user_func_array($callback, [$b, $a]);
    return $a + $b;
}

class Test
{
    public function callback($a, $b)
    {
        echo 'a的值：' . $a . PHP_EOL;
        echo 'b的值：' . $b . PHP_EOL;
    }

    public function go($a, $b)
    {
        // 对象内部使用
        sum1($a, $b, [$this, 'callback']);
    }
}

// 对象外部使用
$b = sum2(1, 2, [new Test(), 'callback']); // 1 2 2 1
(new Test())->go(1, 2);                    //1 2 2 1

class Sort
{
    public function userSort($a, $b)
    {
        if ($a == $b) {
            return 0;
        }

        return $a > $b ? 1 : -1;
    }
}

$arr = [2, 1, 3, 5, 4, 6];

usort($arr, [(new Sort()), 'userSort']);

var_dump($arr); // 执行结果：[1,2,3,4,5,6];
